home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / tcppt1.zip / DOS.H next >
C/C++ Source or Header  |  1990-08-08  |  9KB  |  285 lines

  1. /*    dos.h
  2.  
  3.     Defines structs, unions, macros, and functions for dealing
  4.     with MSDOS and the Intel iAPX86 microprocessor family.
  5.  
  6.         Copyright (c) Borland International 1987,1988,1990
  7.     All Rights Reserved.
  8. */
  9. #ifndef __DOS_H
  10. #define __DOS_H
  11.  
  12. #if __STDC__
  13. #define _Cdecl
  14. #else
  15. #define _Cdecl    cdecl
  16. #endif
  17.  
  18. #ifndef __PAS__
  19. #define _CType _Cdecl
  20. #else
  21. #define _CType pascal
  22. #endif
  23.  
  24. /* Variables */
  25. extern    int        const _Cdecl _8087;
  26. extern    int        _Cdecl _argc;
  27. extern    char          **_Cdecl _argv;
  28. extern    char          **_Cdecl  environ;
  29.  
  30. extern    int        _Cdecl _doserrno;
  31.  
  32. extern    unsigned    _Cdecl _heaplen;
  33. extern    unsigned char    _Cdecl _osmajor;
  34. extern    unsigned char    _Cdecl _osminor;
  35. extern    unsigned     _Cdecl _psp;
  36. extern    unsigned    _Cdecl _stklen;
  37. extern    unsigned    _Cdecl _fpstklen;
  38. extern    unsigned     _Cdecl _version;
  39.  
  40. #define FA_RDONLY    0x01        /* Read only attribute */
  41. #define FA_HIDDEN    0x02        /* Hidden file */
  42. #define FA_SYSTEM    0x04        /* System file */
  43. #define FA_LABEL    0x08        /* Volume label */
  44. #define FA_DIREC    0x10        /* Directory */
  45. #define FA_ARCH        0x20        /* Archive */
  46.  
  47. #define NFDS    20            /* Maximum number of fds */
  48.  
  49. struct    fcb    {
  50.     char    fcb_drive;        /* 0 = default, 1 = A, 2 = B */
  51.     char    fcb_name[8];        /* File name */
  52.     char    fcb_ext[3];        /* File extension */
  53.     short    fcb_curblk;        /* Current block number */
  54.     short    fcb_recsize;        /* Logical record size in bytes */
  55.     long    fcb_filsize;        /* File size in bytes */
  56.     short    fcb_date;        /* Date file was last written */
  57.     char    fcb_resv[10];        /* Reserved for DOS */
  58.     char    fcb_currec;        /* Current record in block */
  59.     long    fcb_random;        /* Random record number */
  60. };
  61.  
  62. struct    xfcb    {
  63.     char        xfcb_flag;    /* Contains 0xff to indicate xfcb */
  64.     char        xfcb_resv[5];    /* Reserved for DOS */
  65.     char        xfcb_attr;    /* Search attribute */
  66.     struct    fcb    xfcb_fcb;    /* The standard fcb */
  67. };
  68.  
  69. struct  COUNTRY {
  70.     int    co_date;
  71.     char    co_curr[5];
  72.     char    co_thsep[2];
  73.     char    co_desep[2];
  74.     char    co_dtsep[2];
  75.     char    co_tmsep[2];
  76.     char    co_currstyle;
  77.     char    co_digits;
  78.     char    co_time;
  79.     long    co_case;
  80.     char    co_dasep[2];
  81.     char    co_fill[10];
  82. };
  83.  
  84. struct    DOSERROR {
  85.         int     de_exterror;
  86.         int     de_class;
  87.         char    de_action;
  88.         char    de_locus;
  89. };
  90.  
  91. struct    dfree    {
  92.     unsigned df_avail;
  93.     unsigned df_total;
  94.     unsigned df_bsec;
  95.     unsigned df_sclus;
  96. };
  97.  
  98. struct    fatinfo {
  99.     char    fi_sclus;
  100.     char    fi_fatid;
  101.     int    fi_nclus;
  102.     int    fi_bysec;
  103. };
  104.  
  105. struct    devhdr    {
  106.     long        dh_next;    /* Next device pointer */
  107.     short        dh_attr;    /* Attributes */
  108.     unsigned short    dh_strat;    /* Driver strategy routine */
  109.     unsigned short    dh_inter;    /* Driver interrupt routine */
  110.     char        dh_name[8];    /* Device name */
  111. };
  112.  
  113. struct    time    {
  114.     unsigned char    ti_min;        /* Minutes */
  115.     unsigned char    ti_hour;    /* Hours */
  116.     unsigned char    ti_hund;    /* Hundredths of seconds */
  117.     unsigned char    ti_sec;        /* Seconds */
  118. };
  119.  
  120. struct    date    {
  121.     int        da_year;        /* Year - 1980 */
  122.     char        da_day;        /* Day of the month */
  123.     char        da_mon;        /* Month (1 = Jan) */
  124. };
  125.  
  126. struct WORDREGS {
  127.     unsigned int    ax, bx, cx, dx, si, di, cflag, flags;
  128. };
  129.  
  130. struct BYTEREGS {
  131.     unsigned char    al, ah, bl, bh, cl, ch, dl, dh;
  132. };
  133.  
  134. union    REGS    {
  135.     struct    WORDREGS x;
  136.     struct    BYTEREGS h;
  137. };
  138.  
  139. struct    SREGS    {
  140.     unsigned int    es;
  141.     unsigned int    cs;
  142.     unsigned int    ss;
  143.     unsigned int    ds;
  144. };
  145.  
  146. struct    REGPACK {
  147.     unsigned    r_ax, r_bx, r_cx, r_dx;
  148.     unsigned    r_bp, r_si, r_di, r_ds, r_es, r_flags;
  149. };
  150.  
  151. typedef struct {
  152.     char    ds_drive;       /* do not change       */
  153.     char    ds_pattern [13];   /*  these fields,       */
  154.     char    ds_reserved [7];   /*    Microsoft reserved */
  155.     char    ds_attrib;
  156.     short    ds_time;
  157.     short    ds_date;
  158.     long    ds_size;
  159.     char    ds_nameZ [13];       /* result of the search, asciiz */
  160. }    dosSearchInfo;    /* used with DOS functions 4E, 4F    */
  161.  
  162.  
  163. #ifdef __cplusplus
  164. extern "C" {
  165. #endif
  166. int     _Cdecl absread    (int __drive, int __nsects, long __lsect, void *__buffer);
  167. int     _Cdecl abswrite(int __drive, int __nsects, long __lsect, void *__buffer);
  168. int     _Cdecl allocmem(unsigned __size, unsigned *__segp);
  169. int     _CType bdos    (int __dosfun, unsigned __dosdx, unsigned __dosal);
  170. int     _Cdecl bdosptr    (int __dosfun, void *__argument, unsigned __dosal);
  171. struct  COUNTRY *_Cdecl country (int __xcode, struct COUNTRY *__cp);
  172. void     _Cdecl ctrlbrk    (int _Cdecl (*handler)(void));
  173. void     _Cdecl delay    (unsigned __milliseconds);
  174. void     _Cdecl disable    (void);
  175. int         _Cdecl dosexterr    (struct DOSERROR *__eblkp);
  176. long     _Cdecl dostounix    (struct date *__d, struct time *__t);
  177. void            __emit__();
  178. void     _Cdecl enable    (void);
  179. int         _Cdecl freemem    (unsigned __segx);
  180. int         _Cdecl getcbrk    (void);
  181. void     _CType getdate    (struct date *__datep);
  182. void     _Cdecl getdfree(unsigned char __drive, struct dfree *__dtable);
  183. void     _Cdecl getfat    (unsigned char __drive, struct fatinfo *__dtable);
  184. void     _Cdecl getfatd    (struct fatinfo *__dtable);
  185. unsigned _Cdecl getpsp    (void);
  186. int         _Cdecl getswitchar    (void);
  187. void     _CType gettime    (struct time *__timep);
  188. int         _Cdecl getverify    (void);
  189. void     _Cdecl harderr    (int _Cdecl (*handler)());
  190. void     _Cdecl hardresume    (int __axret);
  191. void     _Cdecl hardretn(int __retn);
  192. int         _Cdecl inport    (int __portid);
  193. unsigned char    _Cdecl inportb(int __portid);
  194. int     _Cdecl int86    (int __intno, union REGS *__inregs, union REGS *__outregs);
  195. int     _Cdecl int86x    (int __intno, union REGS *__inregs, union REGS *__outregs,
  196.                      struct SREGS *__segregs);
  197. int     _Cdecl intdos    (union REGS *__inregs, union REGS *__outregs);
  198. int     _Cdecl intdosx    (union REGS *__inregs, union REGS *__outregs,
  199.                      struct SREGS *__segregs);
  200. void     _Cdecl intr    (int __intno, struct REGPACK *__preg);
  201. void     _Cdecl keep    (unsigned char __status, unsigned __size);
  202. void      _Cdecl nosound    (void);
  203. void     _Cdecl outport    (int __portid, int __value);
  204. void     _Cdecl outportb(int __portid, unsigned char __value);
  205. char    *_Cdecl parsfnm    (const char *__cmdline, struct fcb *__fcb, int __opt);
  206. int         _Cdecl peek    (unsigned __segment, unsigned __offset);
  207. char     _Cdecl peekb    (unsigned __segment, unsigned __offset);
  208. void     _Cdecl poke    (unsigned __segment, unsigned __offset, int __value);
  209. void     _Cdecl pokeb    (unsigned __segment, unsigned __offset, char __value);
  210. int         _Cdecl randbrd    (struct fcb *__fcb, int __rcnt);
  211. int         _Cdecl randbwr    (struct fcb *__fcb, int __rcnt);
  212. void     _Cdecl segread    (struct SREGS *__segp);
  213. int         _Cdecl setblock(unsigned __segx, unsigned __newsize);
  214. int         _Cdecl setcbrk    (int __cbrkvalue);
  215. void     _Cdecl setdate    (struct date *__datep);
  216. void     _Cdecl setswitchar    (char __ch);
  217. void     _Cdecl settime    (struct time *__timep);
  218. void     _Cdecl setverify    (int __value);
  219. void     _Cdecl sleep    (unsigned __seconds);
  220. void      _Cdecl sound    (unsigned __frequency);
  221. void     _Cdecl unixtodos    (long __time, struct date *__d, struct time *__t);
  222. int         _CType    unlink    (const char *__path);
  223.  
  224.     /* These are in-line functions.  These prototypes just clean up
  225.        some syntax checks and code generation.
  226.      */
  227.  
  228. void    _Cdecl            __cli__        (void);
  229. void    _Cdecl            __sti__        (void);
  230. void    _Cdecl          __int__        (int __interruptnum);
  231. unsigned char    _Cdecl  __inportb__ (int __portid);
  232. void     _Cdecl         __outportb__(int __portid, unsigned char __value);
  233.  
  234. #define disable() __emit__( (char)(0xfa) )
  235. #define enable()  __emit__( (char)(0xfb) )
  236.  
  237. #define geninterrupt(i) __int__(i)        /* Interrupt instruction */
  238.  
  239. #define outportb        __outportb__
  240. #define inportb         __inportb__
  241.  
  242. /* some other compilers use inp, outp for inportb, outportb */
  243. #define inp(portid)    inportb(portid)
  244. #define outp(portid,v)    outportb(portid,v)
  245.  
  246. extern    unsigned    _Cdecl    _ovrbuffer;
  247.  
  248. #if !__STDC__
  249. int cdecl far _OvrInitEms( unsigned __emsHandle, unsigned __emsFirst, unsigned __emsPages );
  250. int cdecl far _OvrInitExt( unsigned long __extStart, unsigned long __extLength );
  251.  
  252. char far *cdecl getdta(void);
  253. void      cdecl setdta(char far *__dta);
  254.  
  255. #define MK_FP(seg,ofs)    ((void _seg *)(seg) + (void near *)(ofs))
  256. #define FP_SEG(fp)      ((unsigned)(void _seg *)(void far *)(fp))
  257. #define FP_OFF(fp)      ((unsigned)(fp))
  258.  
  259. #ifdef __cplusplus
  260. void    interrupt    (far * _CType getvect(int __interruptno)) (...);
  261. void    _CType setvect (int __interruptno, void interrupt (far *__isr) (...));
  262. int  inline _Cdecl peek(unsigned __segment, unsigned __offset)    
  263.                    { return (*((int  far*)MK_FP(__segment, __offset))); }
  264. char inline _Cdecl peekb(unsigned __segment, unsigned __offset) 
  265.                    { return (*((char far*)MK_FP(__segment, __offset))); }
  266. void inline _Cdecl poke(unsigned __segment, unsigned __offset, int __value)  
  267.                    { (*((int  far*)MK_FP(__segment, __offset)) = __value); }
  268. void inline _Cdecl pokeb(unsigned __segment, unsigned __offset, char __value)   
  269.                    { (*((char far*)MK_FP(__segment, __offset)) = __value); }
  270. #else
  271. void    interrupt     (far * _CType getvect(int __interruptno)) ();
  272. void    _CType setvect (int __interruptno, void interrupt (far *__isr) ());
  273. #define peek(a,b)        (*((int  far*)MK_FP((a),(b))))
  274. #define peekb(a,b)        (*((char far*)MK_FP((a),(b))))
  275. #define poke(a,b,c)        (*((int  far*)MK_FP((a),(b))) = (int)(c))
  276. #define pokeb(a,b,c)    (*((char far*)MK_FP((a),(b))) = (char)(c))
  277. #endif
  278.  
  279. #endif
  280. #ifdef __cplusplus
  281. }
  282. #endif
  283.  
  284. #endif
  285.